package com.fruit.mapper.promotion;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.fruit.pojo.promotion.Activity;
import com.fruit.pojo.promotion.ActivityException;
import com.fruit.pojo.promotion.ActivityGoods;
import com.fruit.pojo.promotion.ActivityRule;
import com.fruit.pojo.promotion.ActivityTakeDetail;
import com.fruit.pojo.promotion.ActivityUserRelation;
import com.fruit.pojo.promotion.ActivityUserInfo;

/**
 * ActivityMapper
 *
 * @author joe
 * @version 2018.03.17 17:29
 */
public interface ActivityMapper {
	/**
	 * 根据商品或套餐ID查询对应的活动
	 *
	 * @param goodsId
	 *            商品或者套餐ID
	 * @param state
	 *            活动状态，00未启动，01已启动，0表示查询所有
	 * @param goodsType
	 *            商品类型 00商品 01 套餐
	 * @return 商品对应的活动列表
	 */
	List<ActivityGoods> getActivityGoods(@Param("goodsId") long goodsId, @Param("state") String state,
			@Param("goodsType") String goodsType);

	/**
	 * 查询截止到指定日期某个用户的所有下级购买记录
	 *
	 * @param userId
	 *            用户ID
	 * @param endTime
	 *            截止日期，格式yyyy-MM-dd HH:mm:ss
	 * @return 列表
	 */
	List<ActivityTakeDetail> getAllActivityTakeDetail(long userId, String endTime);

	/**
	 * 插入一条活动购买记录
	 *
	 * @param detail
	 *            活动购买记录
	 * @return 大于0表示成功
	 */
	int insertActivityTakeDetail(ActivityTakeDetail detail);

	/**
	 * 根据Activity的ID查找Activity
	 *
	 * @param id
	 *            Activity的ID
	 * @return 对应的Activity
	 */
	Activity getActivity(long id);

	/**
	 * 根据Activity的code查找Activity
	 * 
	 * @param code 活动标记
	 * @param state 类型
	 * @return 返回Activity
	 */
	List<Activity> getActivityByCode(@Param("code")String code, @Param("state")String state);

	/**
	 * 根据活动id查询活动规则
	 * 
	 * @param activityId
	 *            活动id
	 * @return 列表
	 */
	List<ActivityRule> selectActivityRulesById(Integer activityId);

	/**
	 * 根据活动ID 父级用户ID 查询下级用户
	 * 
	 * @param activityId
	 *            活动ID
	 * @param userId
	 *            用户ID
	 * @param type
	 *            类型
	 * @return 下级用户
	 */
	List<ActivityUserRelation> getActivityUserRelationByParentId(@Param("activityId") int activityId,
			@Param("userId") int userId, @Param("type") String type);

	/**
	 * 
	 * @param activityId 活动Id
	 * @param type 类型
	 * @param num 数量
	 * @param id 最大ID
	 * @return 返回条数
	 */
	List<com.fruit.pojo.promotion.UserInfo> getActivityUserInfoList(@Param("activityId") int activityId,
			@Param("type") String type, @Param("num") int num, @Param("id") int id);

	/**
	 * 插入活动用户关系
	 * 
	 * @param aur
	 *            参数
	 * @return 插入条数
	 */
	int insertActivityUserRelation(ActivityUserRelation aur);

	/**
	 * 更新活动用户关系
	 * 
	 * @param aur
	 *            参数
	 * @return 更新条数
	 */
	int updateActivityUserRelation(ActivityUserRelation aur);
	
	/**
	 * 更新活动关系用户ID
	 * @param params 参数
	 * @return 更新结果
	 */
	int updateActivityUserRelationUserId(Map<String, Object> params);

	/**
	 * 变更活动关系父级用户ID
	 * @param params 参数
	 * @return 更新结果
	 */
	int updateActivityUserRelationParentId(Map<String, Object> params);
	
	/**
	 * 更新活动用户下级数量
	 * 
	 * @param aur
	 *            参数
	 * @return 更新条数
	 */
	int updateAcitivtyUserRelationChildNum(ActivityUserRelation aur);

	/**
	 * 根据活动id查询活动规则
	 * 
	 * @param params
	 *            活动id
	 * @return 列表
	 */
	List<ActivityRule> selectActivityRulesById(Map<String, Object> params);

	/**
	 * 查看活动用户详情
	 * 
	 * @param activityId
	 *            活动Id
	 * @param userId
	 *            用户Id
	 * @return 用户信息
	 */
	ActivityUserInfo getActivityUserInfo(@Param("activityId") int activityId, @Param("userId") int userId);

	/**
	 * 插入活动用户详情
	 * 
	 * @param aui
	 *            用户信息
	 * @return 插入结果
	 */
	int insertActivityUserInfo(ActivityUserInfo aui);

	/**
	 * 更新活动用户详情
	 * 
	 * @param aui
	 *            用户信息
	 * @return 更新结果
	 */
	int updateActivityUserInfo(ActivityUserInfo aui);

	/**
	 * 返回活动用户关系
	 * 
	 * @param activityId
	 *            活动id
	 * @param userId
	 *            用户Id
	 * @param type
	 *            类型
	 * @return 活动用户关系
	 */
	ActivityUserRelation getActivityUserRelation(@Param("activityId") int activityId, @Param("userId") int userId,
			@Param("type") String type);

	
	/**
	 * 返回活动用户信息
	 * @param params 参数
	 * @return 返回活动用户信息
	 */
	List<ActivityUserInfo> getActivityUserInfoByUids(Map<String, Object> params);
	
	/**
	 * 返回活动用户实名信息
	 * @param params 参数
	 * @return 返回活动用户信息
	 */
	List<ActivityUserInfo> getActivityUserRealByUids(Map<String, Object> params);
	
	/**
	 * 获取活动用户下级数量
	 * 
	 * @param params 
	 * @return 返回结果
	 */
	int countUserChildNum(Map<String, Object> params);

	/**
	 * 保存活动异常日志
	 * 
	 * @param ae
	 *            活动异常日志
	 * @return 结果
	 */
	int saveExceptionActivity(ActivityException ae);
}
